/**
 * 
 * 帮助函数 help
 */

const crypto = require('crypto')
const jwt = require('jsonwebtoken');
const jwtKey = '2254858d-bf44-4698-b254-e3df7a426ff3'
const { promisify } = require('util')
const signAsync = promisify(jwt.sign)
const verifyAsync = promisify(jwt.verify)
module.exports = {
    /**
     * 使用MD5算法对密码进行哈希处理
     * @param {string} password - 用户输入的密码
     * @returns {string} - 返回经过MD5哈希处理后的密码字符串
     */
    md5(password) {
        return crypto.createHash('md5').update(password).digest('hex');
    },
    /**
     * 异步创建JWT令牌
     * 
     * 本函数负责将用户信息通过JWT方式加密，生成JWT令牌
     * 使用了sign_promise函数来实际执行JWT的创建和加密过程
     * 
     * @param {Object} user 用户对象，包含需要写入JWT令牌的信息
     * @param {String} jwtKey 用于JWT加密的密钥
     * @returns {Promise<String>} 返回一个Promise对象，解析为创建的JWT令牌字符串
     */
    createJwt: async (usertoken)=> {
        const token =await signAsync(usertoken, jwtKey, { expiresIn: "12h" })
        return token
    },

    /**
     * 异步验证JWT令牌
     * 
     * 此函数使用promise异步地验证传入的JWT令牌是否有效它通过调用`verify_promise`函数来实现
     * 验证过程使用了JWT密钥，该密钥用于解码和验证JWT的有效性
     * 
     * @param {string} token - 待验证的JWT令牌字符串
     * @returns {Promise} 返回一个promise，该promise在JWT验证完成后解析或拒绝
     */
    async verifyJwt(token) {
        return await verifyAsync(token, jwtKey);
    }
};  